home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
gnu
/
cvs-1_3.lha
/
cvs-1.3
/
src
/
repos.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-31
|
4KB
|
170 lines
/*
* Copyright (c) 1992, Brian Berliner and Jeff Polk
* Copyright (c) 1989-1992, Brian Berliner
*
* You may distribute under the terms of the GNU General Public License as
* specified in the README file that comes with the CVS 1.3 kit.
*
* Name of Repository
*
* Determine the name of the RCS repository and sets "Repository" accordingly.
*/
#include "cvs.h"
#ifndef lint
static char rcsid[] = "@(#)repos.c 1.28 92/03/31";
#endif
char *
Name_Repository (dir, update_dir)
char *dir;
char *update_dir;
{
FILE *fpin;
char *ret, *xupdate_dir;
char repos[PATH_MAX];
char path[PATH_MAX];
char tmp[PATH_MAX];
char cvsadm[PATH_MAX];
char ocvsadm[PATH_MAX];
char *cp;
int has_cvsadm = 0, has_ocvsadm = 0;
if (update_dir && *update_dir)
xupdate_dir = update_dir;
else
xupdate_dir = ".";
if (dir != NULL)
{
(void) sprintf (cvsadm, "%s/%s", dir, CVSADM);
(void) sprintf (ocvsadm, "%s/%s", dir, OCVSADM);
}
else
{
(void) strcpy (cvsadm, CVSADM);
(void) strcpy (ocvsadm, OCVSADM);
}
/* sanity checks */
if (!(has_cvsadm = isdir (cvsadm)) && !(has_ocvsadm = isdir (ocvsadm)))
{
error (0, 0, "in directory %s:", xupdate_dir);
error (1, 0, "there is no version here; do '%s checkout' first",
program_name);
}
if (has_ocvsadm)
{
if (has_cvsadm)
{
error (0, 0, "in directory %s:", xupdate_dir);
error (1, 0, "error: both `%s' and `%s' exist; I give up",
CVSADM, OCVSADM);
}
if (rename (ocvsadm, cvsadm) < 0)
{
error (0, 0, "in directory %s:", xupdate_dir);
error (1, errno, "cannot rename `%s' to `%s'; I give up",
OCVSADM, CVSADM);
}
/*
* We have converted the old CVS.adm directory to the new CVS
* directory. Now, convert the Entries file to the new format, if
* necessary.
*/
check_entries (dir);
}
if (dir != NULL)
(void) sprintf (tmp, "%s/%s", dir, CVSADM_ENT);
else
(void) strcpy (tmp, CVSADM_ENT);
if (!isreadable (tmp))
{
error (0, 0, "in directory %s:", xupdate_dir);
error (1, 0, "*PANIC* administration files missing");
}
if (dir != NULL)
(void) sprintf (tmp, "%s/%s", dir, CVSADM_REP);
else
(void) strcpy (tmp, CVSADM_REP);
if (!isreadable (tmp))
{
error (0, 0, "in directory %s:", xupdate_dir);
error (1, 0, "*PANIC* administration files missing");
}
/*
* The assumption here is that the repository is always contained in the
* first line of the "Repository" file.
*/
fpin = open_file (tmp, "r");
if (fgets (repos, PATH_MAX, fpin) == NULL)
{
error (0, 0, "in directory %s:", xupdate_dir);
error (1, errno, "cannot read %s", CVSADM_REP);
}
(void) fclose (fpin);
if ((cp = rindex (repos, '\n')) != NULL)
*cp = '\0'; /* strip the newline */
/*
* If this is a relative repository pathname, turn it into an absolute
* one by tacking on the CVSROOT environment variable. If the CVSROOT
* environment variable is not set, die now.
*/
if (strcmp (repos, "..") == 0 || strncmp (repos, "../", 3) == 0)
{
error (0, 0, "in directory %s:", xupdate_dir);
error (0, 0, "`..'-relative repositories are not supported.");
error (1, 0, "illegal source repository");
}
if (repos[0] != '/')
{
if (CVSroot == NULL)
{
error (0, 0, "in directory %s:", xupdate_dir);
error (0, 0, "must set the CVSROOT environment variable\n");
error (0, 0, "or specify the '-d' option to %s.", program_name);
error (1, 0, "illegal repository setting");
}
(void) strcpy (path, repos);
(void) sprintf (repos, "%s/%s", CVSroot, path);
}
if (!isdir (repos))
{
error (0, 0, "in directory %s:", xupdate_dir);
error (1, 0, "there is no repository %s", repos);
}
/* allocate space to return and fill it in */
strip_path (repos);
ret = xstrdup (repos);
return (ret);
}
/*
* Return a pointer to the repository name relative to CVSROOT from a
* possibly fully qualified repository
*/
char *
Short_Repository (repository)
char *repository;
{
if (repository == NULL)
return (NULL);
/* if repository matches CVSroot at the beginning, strip off CVSroot */
if (strncmp (CVSroot, repository, strlen (CVSroot)) == 0)
return (repository + strlen (CVSroot) + 1);
else
return (repository);
}